home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 September
/
EnigmA AMIGA RUN 10 (1996)(G.R. Edizioni)(IT)[!][issue 1996-09][EARSAN CD XI].iso
/
internet
/
others
/
wwwcache.lha
/
Cache
/
Cache.www
< prev
next >
Wrap
Text File
|
1995-09-28
|
12KB
|
498 lines
/* $VER: Cache.www 1.4 (28.9.95) Stephan Lichtendahl
Caching of inlined images and HTML documents on harddisk */
cachedir='AmiTCP:Cache/'
copycom='Copy Quiet'
if ~show(l,'rexxsupport.library') then
if ~addlib('rexxsupport.library',0,-30,0) then
exit
if ~show(l,'rexxdossupport.library') then
if ~addlib('rexxdossupport.library',0,-30,2) then
exit .
hit=0
HTML=''
Image=''
saveto=''
ret='0a'x
OPTIONS RESULTS
parse arg args
if ~ReadArgs(args,'Save/S,Load/S,Remove/S,Image/K,HTML/K') then do
say 'Usage: Cache.www [Save] to get/put images in current AMosaic'
say 'document from/to cache, Save will save HTML document as well.'
say 'Cache.www Image/K HTML/K will delete <image> and/or <html> from'
say 'cache. <image> and <html> can be URLs, filenames or both ALL.'
say 'Remove will remove the current AMosaic document from cache,'
say 'and every image in it which is currently visable (ie. loaded).'
say 'Cache.www Load reloads the current cached document from WWW.'
return 0
end
if Image ~= '' | HTML ~= '' then do
if upper(Image) = 'ALL' & upper(HTML) = 'ALL' then
call AllesWeg
else do
if Image ~= '' then do
type=1
call WisItem
end
if HTML ~= '' then do
type=0
call WisItem
end
end
return 0
end
if ~Load & ~Remove then do
address AMOSAIC.1 'fetch images IMAGE'
call open(1input,cachedir'ImageList','R')
imagelist = readch(1input,65535)
call close(1input)
do i=1 for image.0
nieuw.i=0
urlnaam=image.i.url
av=image.i.current
if left(urlnaam,17) = 'file://localhost/' then do
if ~av then
address AMOSAIC.1 'fetch inline url 'urlnaam
end
else do
nr = pos(urlnaam,imagelist)
if nr = 0 & av then do
call open(2input,cachedir'NrOfImage','R')
imgnr = readln(2input)+1
call close(2input)
address command copycom '"'image.i.filename'"' cachedir'Images/'imgnr
address command 'Echo >>'cachedir'ImageList "'imgnr','urlnaam'"'
imagelist=imagelist||imgnr','urlnaam||ret
nieuw.i=imgnr
call open(2output,cachedir'NrOfImage','W')
call writeln(2output,imgnr)
call close(2output)
end
if nr > 0 then do
startnr = lastpos(ret,imagelist,nr)+1
imgnr = substr(imagelist,startnr,nr-startnr-1)
nieuw.i=imgnr
if av then
address command copycom '"'image.i.filename'"' cachedir'Images/'imgnr
else
hit=2
end
end
end
end
address AMOSAIC.1 'get url'
urlnaam = result
if Remove then
call RemHTML
if Load | Save then do
if left(urlnaam,27) = 'file://localhost/T:temphtml' then
address AMOSAIC.1 'jump back'
else do
call open(3input,cachedir'HTMLlist','R')
htmllist = readch(3input,65535)
call close(3input)
dir=cachedir'HTMLs/'
nr = pos(dir,urlnaam)
if nr > 0 then do
saveto = substr(urlnaam,nr+length(dir))
nr = pos(saveto',',htmllist)
startnr = nr+length(saveto)+1
stopnr = pos(ret,htmllist,startnr+1)
urlnaam = substr(htmllist,startnr,stopnr-startnr)
if Load then
address AMOSAIC.1 'jump url 'urlnaam
else
hit=hit+1
end
else
if Save then do
if left(urlnaam,17) = 'file://localhost/' then do
address command 'GetString "Local document - change URL for remote links" String "'urlnaam'" Var newurl Global'
if RC = 0 then
urlnaam = getvar('newurl')
call deletevar('newurl')
end
nr = pos(urlnaam||ret,htmllist)
if nr = 0 then
call NewHTML
else do
startnr = lastpos(ret,htmllist,nr)+1
saveto = substr(htmllist,startnr,nr-startnr-1)
hit=hit+1
end
end
end
end
if hit>0 then do
if hit ~= 2 then
saveto=cachedir'HTMLs/'saveto
else
do n=1 until ~exists(saveto)
saveto='T:temphtml'n
end
nr = lastpos('/',urlnaam)
urlstam = left(urlnaam,nr)
nr = pos('/',urlstam,8)
urlroot = left(urlstam,nr-1)
address AMOSAIC.1 'fetch source'
inhoud = result
nr = max(pos('<html>',inhoud),pos('<HTML>',inhoud))
if nr > 1 then
inhoud = substr(inhoud,nr)
call ChkLinks
zkinhoud=''
call ChkCache
call open(4output,saveto,'W')
call writech(4output,inhoud)
call close(4output)
inhoud=''
address AMOSAIC.1 'jump url file://localhost/'saveto
do i=1 for image.0
if nieuw.i > 0 then
address AMOSAIC.1 'fetch inline url file://localhost/'cachedir'Images/'nieuw.i
end
if hit=2 then
call delete(saveto)
end
exit 0
NewHTML:
nr = lastpos('/',urlnaam)
bestand = substr(urlnaam,nr+1)
address AMOSAIC.1 'fetch title'
titel = result
if bestand = '' then
bestand=titel
q=0
do until q>0
address command 'SetEnv filenaam `RequestFile 'dir' File "'bestand'" Title "Save HTML document as..." SaveMode`'
bestand = getvar('filenaam')
call deletevar('filenaam')
if bestand = '' then
q=1
else do
nr = lastpos('/',bestand)
if left(bestand,nr) = dir then
if ~exists(bestand) then
q=2
end
end
if q=2 then do
saveto = substr(bestand,nr+1)
hit=hit+1
address command 'Echo >>'cachedir'HTMLlist "'saveto','urlnaam'"'
htmllist=htmllist||saveto','urlnaam||ret
address command 'Echo >>'cachedir'Cache.html "<A HREF=*"HTMLs/'saveto'*">'titel'</A><BR>"'
zoek=urlnaam
vervang='file://localhost/'dir||saveto
call MultiFR
end
return 0
RemHTML:
type=0
tekst=cachedir'HTMLs/'
nr = pos(tekst,urlnaam)
if nr > 0 then
HTML = substr(urlnaam,nr+length(tekst))
else
HTML=urlnaam
call WisItem
type=1
address AMOSAIC.1 'fetch images IMAGE'
do i=1 for image.0
if image.i.current then do
tekst=cachedir'Images/'
nr = pos(tekst,image.i.url)
if nr > 0 then
Image = substr(image.i.url,nr+length(tekst))
else
Image=image.i.url
call WisItem
end
end
return 0
ChkLinks:
delta=0
zkinhoud = upper(inhoud)
zoeknr = pos('HREF=',zkinhoud)
do while zoeknr > 0
nr = zoeknr-lastpos('<A',zkinhoud,zoeknr)-2
zoeknr=zoeknr+5
if nr=1 | nr=2 then do
if substr(zkinhoud,zoeknr,1) = '"' then
zoeknr=zoeknr+1
else do
inhoud = insert('"',inhoud,zoeknr+delta-1)
delta=delta+1
end
stopnr = pos('>',zkinhoud,zoeknr)
zklen=stopnr-zoeknr
urlnaam = substr(zkinhoud,zoeknr,zklen)
if pos(':',urlnaam) = 0 then
call ReplUrl
if right(urlnaam,1) ~= '"' then do
inhoud = insert('"',inhoud,stopnr+delta-1)
delta=delta+1
end
end
else
zklen=1
zoeknr = pos('HREF=',zkinhoud,zoeknr+zklen)
end
delta=0
zkinhoud = upper(inhoud) '"'
zoeknr = pos('SRC=',zkinhoud)
do while zoeknr > 0
nr = substr(zkinhoud,zoeknr-1,1)
zoeknr=zoeknr+4
if nr=' ' | nr=ret then do
if substr(zkinhoud,zoeknr,1) = '"' then
zoeknr=zoeknr+1
else do
inhoud = insert('"',inhoud,zoeknr+delta-1)
delta=delta+1
end
stopnr = min(pos('"',zkinhoud,zoeknr),pos(' ',zkinhoud,zoeknr),pos(ret,zkinhoud,zoeknr))+1
zklen=stopnr-zoeknr
urlnaam = substr(zkinhoud,zoeknr,zklen)
if pos('://',urlnaam) = 0 then
call ReplUrl
if right(urlnaam,1) ~= '"' then do
inhoud = insert('"',inhoud,stopnr+delta-2)
delta=delta+1
end
end
else
zklen=1
zoeknr = pos('SRC=',zkinhoud,zoeknr+zklen)
end
delta=0
zkinhoud = upper(inhoud)
zoeknr = pos('ACTION="',zkinhoud)
do while zoeknr > 0
zoeknr=zoeknr+8
stopnr = pos('"',zkinhoud,zoeknr)
zklen=stopnr-zoeknr
urlnaam = substr(zkinhoud,zoeknr,7)
if urlnaam ~= 'HTTP://' then
call ReplUrl
zoeknr = pos('ACTION="',zkinhoud,zoeknr+zklen)
end
return 0
ReplUrl:
if left(urlnaam,1) ~= '#' then do
if left(urlnaam,1) ~= '/' then
tekst=urlstam
else
tekst=urlroot
inhoud = insert(tekst,inhoud,zoeknr+delta-1)
delta=delta+length(tekst)
end
return 0
ChkCache:
do i=1 for image.0
if nieuw.i > 0 then do
nr = pos(image.i.url'"',inhoud)
inhoud = delstr(inhoud,nr,length(image.i.url))
inhoud = insert('file://localhost/'cachedir'Images/'nieuw.i,inhoud,nr-1)
end
end
if hit ~= 2 then do
address AMOSAIC.1 'fetch links HREF'
do i=1 for href.0
nr = pos(href.i.url||ret,htmllist)
if nr > 0 then do
startnr = lastpos(ret,htmllist,nr)+1
bestand = substr(htmllist,startnr,nr-startnr-1)
nr = pos(href.i.url,inhoud)
do while nr > 0
zklen=length(href.i.url)
tekst=substr(inhoud,nr+zklen,1)
if tekst='#' | tekst='"' then do
inhoud = delstr(inhoud,nr,zklen)
inhoud = insert('file://localhost/'cachedir'HTMLs/'bestand,inhoud,nr-1)
end
nr = pos(href.i.url,inhoud,nr+zklen)
end
end
end
end
return 0
AllesWeg:
address command
'Echo >'cachedir'ImageList'
'Echo >'cachedir'NrOfImage 0'
'Delete 'cachedir'Images/#?'
'Echo >'cachedir'HTMLlist'
'Echo >'cachedir'Cache.html "<HTML><HEAD><TITLE>Available cached documents</TITLE></HEAD><BODY>"'
'Delete 'cachedir'HTMLs/#?'
return 0
WisItem:
if type then do
nr = pos('://',Image)
if nr > 0 then
zoek=','Image||ret
else
zoek=ret||Image','
listfile=cachedir'ImageList'
dir=cachedir'Images/'
end
else do
nr = pos('://',HTML)
if nr > 0 then
zoek=','HTML||ret
else
zoek=ret||HTML','
listfile=cachedir'HTMLlist'
dir=cachedir'HTMLs/'
end
call open(1input,listfile,'R')
list = ret||readch(1input,65534)
call close(1input)
nr = pos(zoek,list)
if nr = 0 then
say zoek 'not found in' listfile
else do
startnr = lastpos(ret,list,nr)+1
midnr = pos(',',list,startnr)
stopnr = pos(ret,list,midnr)+1
bestand = substr(list,startnr,midnr-startnr)
urlnaam = substr(list,midnr+1,stopnr-midnr-2)
call delete(dir||bestand)
say dir||bestand 'with URL:' urlnaam 'deleted.'
list = delstr(list,startnr,stopnr-startnr)
call open(1output,listfile,'W')
call writech(1output,substr(list,2))
call close(1output)
if ~type then do
call open(5input,cachedir'Cache.html','R')
list = readch(5input,65535)
call close(5input)
nr = pos('HTMLs/'bestand,list)
startnr = lastpos(ret,list,nr)+1
stopnr = pos(ret,list,nr)+1
list = delstr(list,startnr,stopnr-startnr)
call open(5output,cachedir'Cache.html','W')
call writech(5output,list)
call close(5output)
end
zoek='file://localhost/'dir||bestand
vervang=urlnaam
dir=cachedir'HTMLs/'
call MultiFR
end
return 0
MultiFR:
files = showdir(dir,'FILES',',')
if files = '' then
return 0
else
files=files','
startnr=1
stopnr = pos(',',files)
do until stopnr = 0
bestand = substr(files,startnr,stopnr-startnr)
call open(6input,dir||bestand,'R')
inhoud = readch(6input,65535)
call close(6input)
q=0
nr = pos(zoek,inhoud)
do while nr > 0
zklen=length(zoek)
tekst=substr(inhoud,nr+zklen,1)
if tekst='#' | tekst='"' then do
q=1
inhoud = delstr(inhoud,nr,zklen)
inhoud = insert(vervang,inhoud,nr-1)
zklen=length(vervang)
end
nr = pos(zoek,inhoud,nr+zklen)
end
if q then do
call open(6output,dir||bestand,'W')
call writech(6output,inhoud)
call close(6output)
say dir||bestand 'updated.'
end
startnr=stopnr+1
stopnr = pos(',',files,startnr)
end
inhoud=''
return 0